package org.apache.ibatis.executor.result;

import org.apache.ibatis.reflection.factory.ObjectFactory;
import org.apache.ibatis.session.ResultContext;
import org.apache.ibatis.session.ResultHandler;

import java.util.ArrayList;
import java.util.List;

/**
 * DefaultResultHandler 默认使用 List 存储结果。
 * 除此之外，如果 Mapper （或 Dao）接口方法返回值为 Map 类型，
 * 此时则需要另一种 ResultHandler 实现类处理结果，即 DefaultMapResultHandler。
 *
 * @author Clinton Begin
 */
public class DefaultResultHandler implements ResultHandler<Object> {

    private final List<Object> list;

    public DefaultResultHandler() {
        list = new ArrayList<Object>();
    }

    @SuppressWarnings("unchecked")
    public DefaultResultHandler(ObjectFactory objectFactory) {
        list = objectFactory.create(List.class);
    }

    @Override
    public void handleResult(ResultContext<? extends Object> context) {
        // 添加结果到 list 中
        list.add(context.getResultObject());
    }

    public List<Object> getResultList() {
        return list;
    }

}
